package com.shujia.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class Demo02Junit {
    Connection conn;
    Admin admin;

    @Before
    // 加上@Before注解之后，当运行@Test注解的方法时，会先运行@Before注释的方法
    // 初始化操作可以在该方法中进行
    public void init() throws IOException {
        // 创建一个配置对象
        Configuration conf = HBaseConfiguration.create();
        // 设置hbase对应的zookeeper集群的地址
        conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");

        // 1、建立一个连接
        conn = ConnectionFactory.createConnection(conf);

        // 1、对表的元数据进行操作
        admin = conn.getAdmin();
    }

    @Test
    public void listTables() throws IOException {

        // 查看HBase中所有的表
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            System.out.println(tableName.getNameAsString());
        }

    }

    @Test
    public void listNameSpaces() throws IOException {

        // 查看所有的命名空间
        NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();
        for (NamespaceDescriptor namespaceDescriptor : namespaceDescriptors) {
            System.out.println(namespaceDescriptor.getName());
        }
    }

    @Test
    public void createNameSpace() throws IOException {
        // 创建命名空间
        NamespaceDescriptor ns5 = NamespaceDescriptor.create("ns5").build();
        admin.createNamespace(ns5);
    }

    @After
    public void close() throws IOException {
        admin.close();
        conn.close();
    }

}
